package xyz.lne.researchgroupmanage.mapper;

import org.apache.ibatis.annotations.Mapper;
import xyz.lne.researchgroupmanage.entity.ResearchGroup;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import xyz.lne.researchgroupmanage.service.dataTransferObject.*;

import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author team7
 * @since 2021-01-19
 */
@Mapper
public interface ResearchgroupMapper extends BaseMapper<ResearchGroup> {

    /**
     * 根据用户id，查询该用户参加的课题组的缩略信息
     * @param userId 用户id
     * @return 课题组的缩略信息
     */
    List<ResearchGroupSimpleDTO> selectJoinedResearchGroupByUserId(Integer userId);

    /**
     * 根据输入的关键字，进行课题组的模糊查询
     * @param word 关键字
     * @return 课题组的缩略信息
     */
    List<ResearchGroupSimpleDTO> selectByWord(String word);

    /**
     * 根据输入的关键字和用户id，进行课题组的模糊查询
     * @param userId 用户id
     * @param word 关键字
     * @return 课题组的缩略信息
     */
    List<ResearchGroupSimpleDTO> selectByUserIdAndWord(Integer userId, String word);


    /**
     * 根据课题组id，查询课题组下没有处理的所有课题申请信息。
     * @param researchGroupId 课题组id
     * @return 课题申请信息
     */
    List<ResearchApplicationDTO> selectUntreatedResearchApplicationByResearchGroupId(Integer researchGroupId);

    /**
     * 根据课题组id，查询申请人申请
     * @param researchGroupId 课题组id
     * @return 申请人申请信息
     */
    List<ProposerApplicationDTO> selectUntreatedProposerApplicationByResearchGroupId(Integer researchGroupId);

    /**
     * 创建课题组信息
     * @param researchGroup 课题组实体
     * @return 影响行数
     */
    Integer createResearchGroup(ResearchGroup researchGroup);

    /**
     * 更新课题组信息
     * @param researchGroup 课题组实体
     * @return 影响行数
     */
    Integer updateResearchGroup(ResearchGroup researchGroup);

    /**
     * 删除课题组
     * @param researchGroupId 课题组id
     * @return 影响行数
     */
    Integer deleteResearchGroupByResearchGroupId(Integer researchGroupId);

    /**
     * 根据用户id，查询该用户创建的课题组信息
     * @param userId 用户id
     * @return 课题组缩略信息
     */
    List<ResearchGroupSimpleDTO> selectCreatedResearchGroupByUserId(Integer userId);

    /**
     * 根据课题组id，查询课题组
     * @param researchGroupId 课题组id
     * @return 课题组dto
     */
    ResearchGroupDTO selectByResearchGroupId(Integer researchGroupId);

    /**
     * 更新用户申请状态
     * @param status 状态
     * @return 影响行数
     */
    Integer updateUserApplicationStatus(Integer researchGroupId, Integer userId, Integer status);

    /**
     * 更新课题申请状态
     * @param status 状态
     * @return 影响行数
     */
    Integer updateResearchApplicationStatus(Integer researchId, Integer userId, Integer status);

    /**
     * 查询课题组下的所有用户
     * @param researchGroupId 课题组id
     * @return 用户dto
     */
    List<UserDTO> selectAllUserByResearchGroupId(Integer researchGroupId);

    /**
     * 查询课题组下的所有课题
     * @param researchGroupId 课题组id
     * @return 课题dto
     */
    List<ResearchDTO> selectAllResearchByResearchGroupId(Integer researchGroupId);

    /**
     * 根据课题组id查找用户
     * @param researchGroupId 课题组id
     * @return 课题组下的用户
     */
    List<UserInResearchGroupDTO> selectUserByResearchGroupId(Integer researchGroupId);

    /**
     * 插入申请一条申请信息
     * @param userResearchGroupDTO 用户申请信息
     * @return 影响行数
     */
    Integer insertUserResearchGroup(UserResearchGroupDTO userResearchGroupDTO);

    void insertKeywordResearchGroup(int keywordId, Integer researchgroupId);

    Integer deleteResearchGroupKeywordsByResearchGroupId(Integer researchGroupId);
}
